﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using RESTServicesProveedores.Persistencia;
using RESTServicesProveedores.Dominio;
using System.Net;

namespace RESTServicesProveedores
{
    // NOTA: puede usar el comando "Rename" del menú "Refactorizar" para cambiar el nombre de clase "Service1" en el código, en svc y en el archivo de configuración.
    public class Proveedores : IProveedores
    {
        ProveedorDAO proveedorDAO = new ProveedorDAO();

        public Proveedor Crear(Proveedor proveedorACrear)
        {

            Proveedor existe = Obtener(proveedorACrear.idProveedor.ToString());
            if (existe != null)
            {
                throw new WebFaultException<Error>(
                new Error()
                {
                    Mensaje = "Ha ingresado datos repetidos, por favor verifique."
                },
                HttpStatusCode.InternalServerError
                );
            }
            Proveedor existeRepetido = proveedorDAO.BuscarRepetido(proveedorACrear.NombreRazon);
            if (existeRepetido != null)
            {
                throw new WebFaultException<Error>(
                new Error()
                {
                    Mensaje = "ERROR EN COLA: Proveedor de RUC: " + proveedorACrear.RucDni + " y Razón Social :"+ proveedorACrear.NombreRazon + " Repetidos. Por favor llame al administrador del sistema."
                },
                HttpStatusCode.InternalServerError
                );
            }


            return proveedorDAO.Crear(proveedorACrear);
        }



        public Proveedor Obtener(string idProveedor)
        {

            return proveedorDAO.Obtener(idProveedor);
        }
        public ICollection<Proveedor> ListarTodos()
        {

            return proveedorDAO.ListarTodos();
        }
        public Proveedor Modificar(Proveedor proveedorAModificar)
        {

            Proveedor existe = proveedorDAO.BuscarRepetido(proveedorAModificar.NombreRazon);
            if (existe != null)
            {
                throw new WebFaultException<Error>(
                new Error()
                {
                    Mensaje = "ERROR EN COLA: Ha modificado a un proveedor poniéndole una Razón Social: " + proveedorAModificar.NombreRazon + " Repetida. Por favor llame al administrador del sistema."
                },
                HttpStatusCode.InternalServerError
                );
            }
            return proveedorDAO.Modificar(proveedorAModificar);
        }
        public void Eliminar(string idProveedor)
        {
            proveedorDAO.Eliminar(idProveedor);
        }
    }
}
